package org.phantom.securityframework.api;

import java.io.Serializable;
import java.util.List;

import org.phantom.securityframework.api.Account;
import org.phantom.securityframework.api.Permission;

import org.phantom.securityframework.api.domain.Group;
import org.phantom.securityframework.api.domain.Module;
import org.phantom.securityframework.api.domain.Role;
/**
 * 权限管理接口
 * @author david
 *
 */
public interface PermissionManager {


	/**
	 * 新建权限
	 * @param permission
	 * @return
	 */
	Permission save(Permission permission);
	/**
	 * 在模块下新建资源
	 * @param permission
	 * @param moduleId 模块id
	 * @return
	 * @throws Exception
	 */
	Permission save(Permission permission,int moduleId)throws Exception;

	/**
	 * 在模块下新建资源
	 * @param permission
	 * @param module
	 * @return
	 * @throws Exception
	 */
	Permission save(Permission permission,Module module)throws Exception;
	/**
	 * 获取权限
	 * @param id
	 * @return
	 */
	Permission get(int id);
	
	Permission get(String permName);
	

	/**
	 * 查看管理员能够使用哪些权限
	 * @param accountId
	 * @return
	 */
	List<Permission> list4mgt(int accountId);
	
	/**
	 * 权限分配
	 * @param accountId
	 * @param permissionIds
	 */
	void mgtAccountPermission(int accountId,int[] permissionIds);
	/**
	 * 取消分配
	 * @param accountId
	 * @param permissionIds
	 */
	void unmgtAccountPermission(int accountId,int[] permissionIds);
	
	
	
	/**
	 * 帐号授权
	 * @param account
	 * @param permissions
	 */
	 void relAccountPermission(Account account,Permission[] permissions);
		/**
		 * 帐号授权
		 * @param account
		 * @param permissions
		 */
	 void relAccountPermission(Account account,Serializable[] permissionIds);
		/**
		 * 帐号授权
		 * @param account
		 * @param permissions
		 */
	 void relAccountPermission(Serializable accountId,Serializable[] permissionIds);

	/**
	 * 取消帐号授权
	 * @param account
	 * @param permissions
	 */
	 void unrelAccountPermission(Account account,Permission[] permissions);
		/**
		 * 取消帐号授权
		 * @param account
		 * @param permissions
		 */
	 void unrelAccountPermission(Account account,Serializable[] permissionIds);
		/**
		 * 取消帐号授权
		 * @param account
		 * @param permissions
		 */
	 void unrelAccountPermission(Serializable accountId,Serializable[] permissionIds);
	
	
	/**
	 * 用户组授权
	 * @param group
	 * @param permissions
	 */
	 void relGroupPermission(Group group,Permission[] permissions);
		
		/**
		 * 用户组授权
		 * @param group
		 * @param permissions
		 */
	 void relGroupPermission(Group group,Serializable[] permissions);
		
		/**
		 * 用户组授权
		 * @param group
		 * @param permissions
		 */
	 void relGroupPermission(Serializable groupId,Serializable[] permissions);

		
		/**
		 * 取消用户组授权
		 * @param group
		 * @param permissions
		 */
	 void unrelGroupPermission(Group group,Permission[] permissions);
		
		/**
		 * 取消用户组授权
		 * @param group
		 * @param permissions
		 */
	 void unrelGroupPermission(Group group,Serializable[] permissions);
		
		/**
		 * 取消用户组授权
		 * @param group
		 * @param permissions
		 */
	 void unrelGroupPermission(Serializable groupId,Serializable[] permissions);
	
	
	
	/**
	 * 角色授权
	 * @param role
	 * @param permissions
	 */
	 void relRolePermission(Role role,Permission[] permissions);
		/**
		 * 角色授权
		 * @param role
		 * @param permissions
		 */
	 void relRolePermission(Role role,Serializable[] permissionIds);
		/**
		 * 角色授权
		 * @param role
		 * @param permissions
		 */
	 void relRolePermission(Serializable roleId,Serializable[] permissionIds);

		/**
		 * 角色授权
		 * @param role
		 * @param permissions
		 */
	 void unrelRolePermission(Role role,Permission[] permissions);
		/**
		 * 角色授权
		 * @param role
		 * @param permissions
		 */
	 void unrelRolePermission(Role role,Serializable[] permissionIds);
		/**
		 * 角色授权
		 * @param role
		 * @param permissions
		 */
	 void unrelRolePermission(Serializable roleId,Serializable[] permissionIds);
}
